/*
 * 
 */
package w83b.w83bDAO;



import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import w83b.Thread.W83bNotificacionThread;
import w83b.util.jdbc.W83bDataBase;
import w83b.w83bBeans.W83bUsuarioBean;
import w83b.w83bBeans.W83bDocumentoBean;
import w83b.w83bBeans.W83bLotesPreavisosBean;
import w83b.w83bBeans.W83bNotificacionesBean;
import w83b.w83bBeans.W83bUsuarioXLNetsBean;
import w83b.w83bDAO.w83bConstantesBD.W83bLotesPreavisosBD;
import w83b.w83bDAO.w83bConstantesBD.W83bUsuariosBD;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;

import w83b.w83bUtilidadesComunes.W83bInformacionProcedimiento;
import w83b.w83bUtilidadesComunes.W83bProperties;
import w83b.w83bUtilidadesComunes.W83bStringUtil;
import w83b.w83bUtilidadesComunes.W83bClsTrazas;
import w83b.w83bUtilidadesComunes.W83bDateUtil;
import w83b.w83bUtilidadesComunes.W83bUtilidadesN38API;
import w83b.w83bUtilidadesLibroRegistro.W83bLibroRegistro;



// TODO: Auto-generated Javadoc
/**
 * The Interface W83bIPreavisosDAO.
 * @author a
 */
public class W83bLotesPreavisosDAO implements W83bILotesPreavisosDAO{
	
	
	public HashMap anyadirLotePreavisos(W83bLotesPreavisosBean param) throws Exception {
		StringBuffer strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		List params = new ArrayList();
		
		W83bClsTrazas.trazaError(null, " DAOOOO anyadirLotePreavisos",null);
		 
		W83bDocumentoBean doc = new W83bDocumentoBean();
		if(param.getListaDocs().size()>0){
			doc=(W83bDocumentoBean)param.getListaDocs().get(0);
		}
		
		W83bClsTrazas.trazaError(null, " doc: " + doc.getNombre(),null);
		
		List existe = new ArrayList();
		if(param.getListaDocs().size()>0){
			//miro a ver si ya existe el fichero
			StringBuffer strSqlExiste = new StringBuffer();
			strSqlExiste.append("SELECT ");
			strSqlExiste.append(W83bLotesPreavisosBD.codLote);
			strSqlExiste.append(" FROM ");
			strSqlExiste.append(W83bLotesPreavisosBD.lotesPreavisosTable);
			strSqlExiste.append(" WHERE ");
			strSqlExiste.append(W83bLotesPreavisosBD.nombreFichero).append(" ='").append(doc.getNombre()).append("'");
			
			existe = W83bDataBase.executeSimpleQuery(strSqlExiste.toString(),new ArrayList(),null);
		}	
		
		
		
		
		HashMap mapa = new HashMap();
		
		if(param.getListaDocs().size()==0){
			mapa.put("error", "ficherovacio");
		}else if(existe.size()>0){
			mapa.put("error", "ficheroexiste");
		}else{
			//miro a ver cual es el ultimo id usado (LOTE_007)
			StringBuffer strSqlCorrelativo = new StringBuffer();
			strSqlCorrelativo.append("SELECT MAX(");
			strSqlCorrelativo.append(W83bLotesPreavisosBD.codLote);
			strSqlCorrelativo.append(") AS ").append(W83bLotesPreavisosBD.codLote);;
			strSqlCorrelativo.append(" FROM ");
			strSqlCorrelativo.append(W83bLotesPreavisosBD.lotesPreavisosTable);
			
			List idLote = W83bDataBase.executeSimpleQuery(strSqlCorrelativo.toString(),new ArrayList(),null);
			int idLoteNext=1;
			
			if (idLote!=null && idLote.size()>0 && idLote.get(0)!=null)
			{
				idLoteNext=Integer.parseInt(idLote.get(0).toString())+1;
			}
			//cojo el dni del usuario logueado
			W83bUsuarioXLNetsBean usuario = (W83bUsuarioXLNetsBean)doc.getUsuario();
			String dni = usuario.getDniUsuario();
			param.setIdioma(usuario.getIdioma());
			//cojo la fecha del sistema
			String formato=W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma());
			SimpleDateFormat sdf =new SimpleDateFormat(formato);
			
			String fechaEntrada =sdf.format(new Date());
			
			//nombre del fichero
			String nombreFichero = doc.getNombre();
			
		
			//Fin Libro Registro
			
			//y ahora voy leyendo el archivo para obtener los datos
		    InputStream inputstream = doc.getFileData();
		        
	
		    int read = 0;
		    byte[] bytes = new byte[1024*1024*2];
	
		    ByteArrayOutputStream bos = new ByteArrayOutputStream();
		    while ((read = inputstream.read(bytes)) != -1)
		        bos.write(bytes,0,read);
		    byte[] ba = bos.toByteArray();
	
		    InputStream is1 = new ByteArrayInputStream(ba);
		    InputStream is2 = new ByteArrayInputStream(ba);
		    InputStream is3 = new ByteArrayInputStream(ba);
		    
	
			
			
			 BufferedReader br = new BufferedReader(new InputStreamReader(is2, "UTF-8"));
			
		    String linea="";
		    String codSindicato="";
		    String codTerritorio="";
		    String fechaCreacion="";
		    String correlativo="";
		    String numPreavisos="";
		    String numCentrosAfectados="";
		    String numTotalTrab="";
		    boolean bienFormado1 = false;
		    boolean bienFormado2 = true;
		    boolean bienFormado3 = false;
		    
		    while((linea=br.readLine())!=null){
		      	 
		      	 //tipo de linea 1
		      	 if("1".equals(linea.substring(0,1))){
		      		 if(linea.length()==17){
			      		 codTerritorio = linea.substring(1,3);
			      		 codSindicato = linea.substring(3,6);
			      		 correlativo = linea.substring(6,9);
			      		 if(linea.length()>9){
			      			fechaCreacion = linea.substring(9, linea.length()); 
			      		 }
			      		bienFormado1 = true;
		      		 }
		      	 }
		      	 //tipo de linea 2
		      	 else if("2".equals(linea.substring(0,1))){
		      		if(linea.length()!=585){
		      			bienFormado2 = false;
		      		}
		      	 }
		      	 //tipo de linea 3
		      	 else{
		      		if(linea.length()==22){
			      		 numPreavisos = linea.substring(1,4);
			      		 numCentrosAfectados = linea.substring(4,13);
			      		 numTotalTrab = linea.substring(13,22);
			      		 bienFormado3 = true;
		      		}
		      	 }
		      	 
		      	
		       	
		    }
		    
		    if(bienFormado1 && bienFormado2 && bienFormado3){
		    	strSql.append("INSERT INTO ");
				strSql.append(W83bLotesPreavisosBD.lotesPreavisosTable);
				strSql.append("(");
				strSql.append(W83bLotesPreavisosBD.codLote).append(",");
				
				strSql.append(W83bLotesPreavisosBD.nombreFichero).append(",");
				strSql.append(W83bLotesPreavisosBD.ficheroIda).append(")");

			
				strSql.append(" VALUES (?,?,?)");
		
		
				params.add(new Integer(idLoteNext));
		
				params.add(nombreFichero);
				params.add(is1);
		
				W83bDataBase.executeBlobTableMovement(strSql.toString(), params,doc.getTamanyo(),doc.getUsuario());
				
			    params.clear();
			    strSql = new StringBuffer();
				strSql.append("UPDATE ") ;
				strSql.append(W83bLotesPreavisosBD.lotesPreavisosTable);
				strSql.append(" SET ");
				strSql.append(W83bLotesPreavisosBD.dni);
				strSql.append(" = ?");
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.codSindi07);
				strSql.append(" = ?");
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.fechaEntrada);
				if(StringUtils.isNotEmpty(fechaCreacion)){
					strSql.append("=to_date(?,?)");
				}else{
					strSql.append("=?");			
				}
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.codTerrit);
				strSql.append(" = ?");
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.fechaCreacion);
				strSql.append(" = to_date(?,?)");
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.correlativo);
				strSql.append(" = ?");
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.numPreavisos);
				strSql.append(" = ?");
				strSql.append(",");
				strSql.append(W83bLotesPreavisosBD.centrosAfect7);
				strSql.append(" = ?").append(",");
				strSql.append(W83bLotesPreavisosBD.numTrab7);
				strSql.append(" = ?");
				strSql.append(" WHERE ").append(W83bLotesPreavisosBD.codLote).append(" = ? ");
				
				
				params.add(dni);
				params.add(codSindicato);
				params.add(fechaEntrada);
				params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
				params.add(codTerritorio);
				if(StringUtils.isNotEmpty(fechaCreacion)){
					params.add(fechaCreacion);
					 params.add(W83bDateUtil.getInstance().devolverFormatoIdioma("eu"));
				}else{
					params.add(W83bClsConstantes.NULL_DATE);
				}
				
				params.add(correlativo);
		
				params.add(numPreavisos);
				params.add(numCentrosAfectados);
				params.add(numTotalTrab);
				params.add(new Integer(idLoteNext));
				
				W83bDataBase.executeTableMovement(strSql.toString(), params,param.getUsuarioBean());
				
				strSqlCorrelativo = new StringBuffer();
				strSqlCorrelativo.append("SELECT MAX(");
				strSqlCorrelativo.append(W83bLotesPreavisosBD.idPreaviso8);
				strSqlCorrelativo.append(") AS ").append(W83bLotesPreavisosBD.idPreaviso8);;
				strSqlCorrelativo.append(" FROM ");
				strSqlCorrelativo.append(W83bLotesPreavisosBD.preavisosTable);
				
				List idPreaviso = W83bDataBase.executeSimpleQuery(strSqlCorrelativo.toString(),new ArrayList(),null);
				int idPreavNext=1;
				
				if (idPreaviso!=null && idPreaviso.size()>0 && idPreaviso.get(0)!=null)
				{
					idPreavNext=Integer.parseInt(idPreaviso.get(0).toString())+1;
				}
			        
			    
				
			    //BufferedReader br2 = new BufferedReader(new InputStreamReader(is3, "UTF-8"));
			    BufferedReader br2 = new BufferedReader(new InputStreamReader(is3, "ISO-8859-1"));
			    String linea2="";
			    
			    String cif="";
			    String razonSocial=""; 
			    String domicilio=""; 
			   // String territorio=""; 
			    String municipio=""; 
			    String codPostal=""; 
			    String telefono=""; 
			    String email=""; 
			    String fax=""; 
			    String cnae=""; 
			    String fInicio=""; 
			    String codConvenio=""; 
			    String parcial=""; 
			    String global=""; 
			    String centrosAfectados=""; 
			    String admonEmpresa=""; 
			    
			    String ident=""; 
			    String codSindi=""; 
			    String observaciones=""; 
			    
			    String tipoIden="";
			    String territorioSS="";
			    String numSS="";
			    String ctrlSS="";
			    String numTrabaj="";
			    String provinciaPreaviso="";
			    
			    while((linea2=br2.readLine())!=null){
			      
			      	 if("2".equals(linea2.substring(0,1))){
			      		 cif = linea2.substring(1,10);
			      		 tipoIden = linea2.substring(10,11);
			      		 razonSocial = linea2.substring(11,61);
			      		 domicilio = linea2.substring(61,111);
			      		 provinciaPreaviso = linea2.substring(111,113);
			      		 municipio = linea2.substring(113,116);
			      		 codPostal = linea2.substring(116,121);
			      		 telefono = linea2.substring(121,136);
			      		 fax = linea2.substring(136,151);
			      		 email = linea2.substring(151,201);
			      		 cnae = linea2.substring(201,205);
			      		 cnae = cnae.trim();
			      		 if(cnae.length()<4){
			      			cnae = W83bStringUtil.toStringNumerico(cnae, 4);//NOPMD
			      		 }
			      		territorioSS = linea2.substring(205, 207);
			      		numSS = linea2.substring(207,214);
			      		ctrlSS = linea2.substring(214, 216);
			      		numTrabaj = linea2.substring(235, 241);
			      	 	 fInicio = linea2.substring(216, 224);
			      		 codConvenio = linea2.substring(224, 227);
			      		 parcial = linea2.substring(227,228);
			      		 global = linea2.substring(228,229);
			      		 centrosAfectados = linea2.substring(229, 235);
			      		 admonEmpresa = linea2.substring(241,242);
			      		 codSindi = linea2.substring(242,245);
			      		 
			      		 ident = linea2.substring(280, 330);
			      		 observaciones = linea2.substring(330,585);
			      		 
			      		 params.clear();
			      		 strSql = new StringBuffer(W83bClsConstantes.CUARENTA);//NOPMD
			      		 strSql.append("INSERT INTO ");
			     		 strSql.append(W83bLotesPreavisosBD.preavisosTable);
			     		 strSql.append("(");
			     		 strSql.append(W83bLotesPreavisosBD.idPreaviso8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.cif).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.razonSocial).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.domicilio).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.territorio8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.municipio8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.fechaInicio).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.centrosAfect).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.codLote8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.codPostal8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.telefono8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.fax8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.email8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.cnae8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.codConvenio8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.parcial8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.global8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.admonEmp8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.codSindi8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.ident8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.tipoIden8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.provincia8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.thSS8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.numSS8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.ctrlSS8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.numTrab8).append(",");
			     		 strSql.append(W83bLotesPreavisosBD.observaciones8).append(")");
			     		 
			     		 
			     		strSql.append(" VALUES (?,?,?,?,?,?,to_date(?,?),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
		 				
			     		 params.add(new Integer(idPreavNext));//NOPMD
			     		 params.add(cif);
			     		 params.add(razonSocial);
			     		 params.add(domicilio);
			     		 params.add(codTerritorio);
			     		 params.add(municipio);
			     		 params.add(fInicio);
		    			 params.add(W83bDateUtil.getInstance().devolverFormatoIdioma("eu"));
		    			 params.add(centrosAfectados);
		    			 params.add(new Integer(idLoteNext));//NOPMD
		    			 params.add(codPostal);
		    			 params.add(telefono);
		    			 params.add(fax);
		    			 params.add(email);
		    			 params.add(cnae);
		    			 params.add(codConvenio);
		    			 params.add(parcial);
		    			 params.add(global);
		    			 params.add(admonEmpresa);
		    			 params.add(codSindi);
		    			 params.add(ident);
		    			 params.add(tipoIden);
		    			 params.add(provinciaPreaviso);
		    			 params.add(territorioSS);
		    			 params.add(numSS);
		    			 params.add(ctrlSS);
		    			 params.add(numTrabaj);
		    			 params.add(observaciones);
			     		
		    			  W83bDataBase.executeTableMovement(strSql.toString(), params,param.getUsuarioBean());
		    			  
		    			  idPreavNext=idPreavNext+1;
			      	 } 	
			    }
			    mapa.put("codSelec",idLoteNext+"");
			    mapa.put("codSindicato",codSindicato);
		    	mapa.put("error", "sinerror");
		    }   
		    else{
		    	mapa.put("error", "malformado");
		    }
	}    
	   
		
		
		//libro de registro
//		if ("0".equals(param.getUsuarioBean().getRegManual()))
//		{
//			W83bLibroRegistroBean libroRegBean=W83bUtilidadesLibroRegistro.registrarLibroRegistro(param.getUsuarioBean());
			//Libro Registro
//			
//			
//			try{	
//				String [] resul=W83bLibroRegistro.getAltaRegistro(true, param.getUsuarioBean().getModelo(), "E", "E", empresa, param.getCodTerritorio(), "", observaciones, param.getUsuarioBean());
//				
//				param.setFecha_registro(resul[1]);
//				param.setNum_registro(resul[0]);
//				
//				//Fin Libro Registro
//				strSql = new StringBuffer();
//				params = new ArrayList();
//				 
//				strSql.append("UPDATE ") ;
//				strSql.append(W83bPreavisosBD.preavisosTable);
//				strSql.append(" SET ");
//				strSql.append(W83bPreavisosBD.f_regis_037);
//				strSql.append(" = to_date(?,'"+W83bClsConstantes.FORMATO_FECHA_COMPLETA_CASTELLANO+"')");
//				strSql.append(",");
//				strSql.append(W83bPreavisosBD.n_regis_037);
//				strSql.append(" = ?");
//				strSql.append(" WHERE ").append(W83bPreavisosBD.c_territ_037).append(" = ? ");
//				strSql.append(" AND ").append(W83bPreavisosBD.ano_preaviso_037).append(" = ? ");
//				strSql.append(" AND ").append(W83bPreavisosBD.n_preaviso_037).append(" = ? ");
//				
//	//			params.add(resul[1]);
//	//			params.add(resul[0]);
//				params.add(param.getFecha_registro());
//				params.add(param.getNum_registro());
//				params.add(param.getCodTerritorio());
//				params.add(new Integer(param.getAnyoPreaviso()));
//				params.add(new Integer(param.getNum_preaviso()));
//				fechaRegistro=param.getFecha_registro();
//				
//				W83bDataBase.executeTableMovement(strSql.toString(), params,param.getUsuarioBean());
//			}catch (W83bLibroRegistroException e) {
//				
//			}
//		}
		


	   
	  
	    
	    
		return mapa;
	}
	

	/* (non-Javadoc)
	 * @see w83b.w83bDAO.W83bIMantenimientosDAO#detalleArbitro(w83b.w83bBeans.W83bArbitrosBean)
	 */
	public List detallePreavisos(W83bLotesPreavisosBean param)
	throws Exception {
		
		StringBuffer strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		List params = new ArrayList();
	

		
		strSql.append("SELECT ");
		strSql.append(W83bLotesPreavisosBD.id8).append(",");
		strSql.append(W83bLotesPreavisosBD.cif).append(",");
		strSql.append(W83bLotesPreavisosBD.razonSocial).append(",");
		strSql.append("DECODE(").append(W83bLotesPreavisosBD.territorio).append(", '', 'No existe', ").append(W83bLotesPreavisosBD.territorio).append(") AS ").append(W83bLotesPreavisosBD.municipio8).append(",");
		strSql.append("DECODE(").append(W83bLotesPreavisosBD.siglasSindi19).append(", '', 'No existe', ").append(W83bLotesPreavisosBD.siglasSindi19).append(") AS ").append(W83bLotesPreavisosBD.siglasSindi19).append(",");
		strSql.append(W83bLotesPreavisosBD.centrosAfect).append(",");
	    strSql.append(" TO_CHAR( ").append(W83bLotesPreavisosBD.fechaInicio).append(",?) AS ").append(W83bLotesPreavisosBD.fechaInicio);
		
		params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
		strSql.append(",").append(W83bLotesPreavisosBD.estado8);
		strSql.append(" FROM ").append(W83bLotesPreavisosBD.preavisosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.lotesPreavisosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.sindicatosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.municipiosTable);
		strSql.append(" WHERE ").append(W83bLotesPreavisosBD.codLote8);
		strSql.append(" = ").append(W83bLotesPreavisosBD.codLote);
		strSql.append(" AND ").append(W83bLotesPreavisosBD.lotesPreavisosTable).append(".").append(W83bLotesPreavisosBD.codSindi07);
		strSql.append(" = ").append(W83bLotesPreavisosBD.sindicatosTable).append(".").append(W83bLotesPreavisosBD.codSindi19).append("(+)");
		strSql.append(" AND ").append(W83bLotesPreavisosBD.codLote8).append(" = ? ");

		params.add(param.getCodLote());

		strSql.append(" AND ").append(W83bLotesPreavisosBD.provincia).append("(+) = ").append(W83bLotesPreavisosBD.territorio8);
		strSql.append(" AND ").append(W83bLotesPreavisosBD.id).append("(+) = ").append(W83bLotesPreavisosBD.municipio8);
		if("1".equals(param.getColumna())){
			strSql.append(" AND ").append(W83bLotesPreavisosBD.tipo8).append(" ='I' ");
		}else if("2".equals(param.getColumna())){
			strSql.append(" AND ").append(W83bLotesPreavisosBD.tipo8).append(" ='V' ");
		}
		if(!param.getIdColumna().equalsIgnoreCase("")){
			strSql.append(" ORDER BY ").append(param.getIdColumna()).append(" ").append(param.getSort());
		}else{
			strSql.append(" ORDER BY ").append(W83bLotesPreavisosBD.id8);
		}
		
		
		List listaPreavisos = W83bDataBase.executeQuery(strSql.toString(),params,W83bLotesPreavisosBean.class,param.getUsuarioBean(), null);
		W83bLotesPreavisosBean bean = new W83bLotesPreavisosBean();
		for(int i=0;i<listaPreavisos.size();i++){
			bean = (W83bLotesPreavisosBean)listaPreavisos.get(i);
			bean.setId8(i+"_"+bean.getId8());
			W83bClsTrazas.trazaError(null, "bean.getId8()"+bean.getId8(),null);
		}
		
		
		return listaPreavisos;	
		

	
	}
	
	/* (non-Javadoc)
	 * @see w83b.w83bDAO.W83bIMantenimientosDAO#detalleArbitro(w83b.w83bBeans.W83bArbitrosBean)
	 */
	public W83bLotesPreavisosBean detalleLotesPreavisos(W83bLotesPreavisosBean param)
			throws Exception {
		
		StringBuffer strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		List params = new ArrayList();

		
		strSql.append("SELECT ");
		strSql.append(W83bLotesPreavisosBD.codLote).append(",");
		strSql.append(W83bLotesPreavisosBD.codTerrit).append(",");
		strSql.append(W83bLotesPreavisosBD.territorio).append(",");
		strSql.append(W83bLotesPreavisosBD.correlativo).append(",");
		if("eu".equals(param.getIdioma())){
			strSql.append(W83bLotesPreavisosBD.descSindiEus).append(" AS ").append(W83bLotesPreavisosBD.descSindi).append(",");
		}else{
			strSql.append(W83bLotesPreavisosBD.descSindi).append(" AS ").append(W83bLotesPreavisosBD.descSindi).append(",");
		}		   
		strSql.append(W83bLotesPreavisosBD.codSindi07).append(",");
		strSql.append(W83bLotesPreavisosBD.nombreFichero).append(",");
		strSql.append(W83bLotesPreavisosBD.ficheroIda).append(",");
		strSql.append(" TO_CHAR( ").append(W83bLotesPreavisosBD.fechaCreacion).append(",?) AS ").append(W83bLotesPreavisosBD.fechaCreacion).append(",");
		strSql.append(" TO_CHAR( ").append(W83bLotesPreavisosBD.fechaEntrada).append(",?) AS ").append(W83bLotesPreavisosBD.fechaEntrada);
		
		params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
		params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
		
		strSql.append(" FROM ").append(W83bLotesPreavisosBD.lotesPreavisosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.sindicatosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.provinciasTable);
		strSql.append(" WHERE ").append(W83bLotesPreavisosBD.lotesPreavisosTable).append(".").append(W83bLotesPreavisosBD.codTerrit);
		strSql.append(" = ").append(W83bLotesPreavisosBD.provinciasTable).append(".").append(W83bLotesPreavisosBD.id);
		strSql.append(" AND ").append(W83bLotesPreavisosBD.lotesPreavisosTable).append(".").append(W83bLotesPreavisosBD.codSindi07);
		strSql.append(" = ").append(W83bLotesPreavisosBD.sindicatosTable).append(".").append(W83bLotesPreavisosBD.codSindi19);
		strSql.append(" AND ").append(W83bLotesPreavisosBD.codLote).append(" = ? ");
		params.add(param.getCodLote());

		W83bClsTrazas.trazaError(null, "SQL:"+ strSql.toString(),null);
		W83bClsTrazas.trazaError(null, "LOTE: " + param.getCodLote(),null);
		
		List listaLotes = W83bDataBase.executeQuery(strSql.toString(),params,W83bLotesPreavisosBean.class,param.getUsuarioBean(), null);
	
		W83bClsTrazas.trazaError(null, "LOTE: " + (W83bLotesPreavisosBean)listaLotes.get(0),null);
		
		return (W83bLotesPreavisosBean)listaLotes.get(0);	
		
	}
	
	
	public W83bLotesPreavisosBean generarNotificaciones(W83bLotesPreavisosBean param)
	throws Exception {
		
		
		StringBuffer strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		StringBuffer strSqlCorrelativo = new StringBuffer(W83bClsConstantes.CUARENTA);
		List params = new ArrayList();
		
		W83bUsuarioXLNetsBean usuario = (W83bUsuarioXLNetsBean)param.getUsuarioBean();
		
		param.setIdioma(usuario.getIdioma());
		
		String territorio = W83bUtilidadesN38API.elegirProvinciaDelegacion(usuario.getPerfilXLNets());
		
		String empresa=param.getCodSindicato();
		
		
		W83bClsTrazas.trazaError(null, "empresa: " + empresa, null);
		W83bClsTrazas.trazaError(null, "usuario: " + usuario.getDniUsuario(), null);
		W83bClsTrazas.trazaError(null, "territorio: " + territorio, null);
		W83bClsTrazas.trazaError(null, "usuario.getModelo(): " + usuario.getModelo(), null);
		
		String [] resul=W83bLibroRegistro.getAltaRegistro(true, usuario.getModelo(), "E", "E", empresa, territorio, "", "", usuario);
				
		param.setFechaRegES(resul[1]);
		param.setNumRegES(resul[0]); 
		

		strSql.append("UPDATE ") ;
		strSql.append(W83bLotesPreavisosBD.lotesPreavisosTable);
		strSql.append(" SET ");
		strSql.append(W83bLotesPreavisosBD.fechaReg7);
		strSql.append(" = to_date(?,?)");
		strSql.append(",");
		strSql.append(W83bLotesPreavisosBD.numReg7);
		strSql.append(" = ?");
		
		strSql.append(" WHERE ").append(W83bLotesPreavisosBD.nombreFichero).append(" = ? ");
		

		 params.add(param.getFechaRegES());
		 if(param.getFechaRegES().length()>10){
				params.add(W83bDateUtil.getInstance().devolverFormatoHoraVeinticuatroAlternativaIdioma("es"));
			}else{
				params.add(W83bDateUtil.getInstance().devolverFormatoIdioma("es"));					
			}
		 params.add(param.getNumRegES());
		 params.add(param.getNombreFichero());
		 
		//W83aDataBase.executeTableMovement(strSql.toString(), params,usuario);
		 W83bDataBase.executeTableMovement(strSql.toString(), params,usuario);
		 
		 params = new ArrayList();
		 strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		 
		//Obtengo los sindicatos a los que hay que notificar
		strSql.append("SELECT ");
		strSql.append(W83bUsuariosBD.dni);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.territorio);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.nombre);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.apellido1);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.apellido2);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.email);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.fechaAlta);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.fechaBaja);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.telefono);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.codSindi);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.descProvincia);
		strSql.append(", ");
		strSql.append(W83bUsuariosBD.rol);
		strSql.append(" FROM ");
		strSql.append(W83bUsuariosBD.usuariosTable);
		strSql.append(" , ").append(W83bUsuariosBD.provinciasTable);
		strSql.append(" WHERE ");
		strSql.append(W83bUsuariosBD.rol).append("=1");
		strSql.append(" AND ");
		strSql.append(W83bUsuariosBD.territorio).append("=").append(territorio);
		strSql.append(" AND ");
		strSql.append(W83bUsuariosBD.territorio).append("=").append(W83bUsuariosBD.idProvincia);
		strSql.append(" AND ");
		strSql.append(W83bUsuariosBD.fechaBaja).append(" IS NULL ");
		
		W83bClsTrazas.trazaError(null," $$$$$$$$$$$$$$$$$$$$$$ strSql::: "+strSql.toString() ,null);
		
		//List listaSindicatos = W83bDataBase.executeSimpleQuery(strSql.toString(),new ArrayList(),null);
		List listaSindicatos = W83bDataBase.executeQuery(strSql.toString(),params,W83bUsuarioBean.class,param.getUsuarioBean(), null);
		W83bClsTrazas.trazaError(null,"$$$$$$$$$$$$$$$$$$$$$$ listaSindicatos::: "+listaSindicatos.size() ,null);
		W83bUsuarioBean elSindi = new W83bUsuarioBean();
		
		for(int i=0;i<listaSindicatos.size();i++){
			elSindi = new W83bUsuarioBean();//NOPMD
			elSindi = (W83bUsuarioBean)listaSindicatos.get(i);
			
			strSql = new StringBuffer();//NOPMD
			strSql.append("SELECT ");
			strSql.append(W83bLotesPreavisosBD.siglasSindi19);
			strSql.append(" FROM ");
			strSql.append(W83bLotesPreavisosBD.sindicatosTable);
			strSql.append(" WHERE ");
			strSql.append(W83bLotesPreavisosBD.codSindi19).append("=").append(elSindi.getOrganizacion());
			List lasSiglas = W83bDataBase.executeQuery(strSql.toString(),params,W83bLotesPreavisosBean.class,param.getUsuarioBean(), null);
			W83bClsTrazas.trazaError(null,"$$$$$$$$$$$$$$$$$$$$$$ lasSiglas::: "+lasSiglas.size() ,null);
			String descSindi ="";
			if(lasSiglas.size()>0){
				W83bLotesPreavisosBean siglas = (W83bLotesPreavisosBean)lasSiglas.get(0);
				descSindi=siglas.getSiglasSindi();
				W83bClsTrazas.trazaError(null,"$$$$$$$$$$$$$$$$$$$$$$ descSindi::: "+descSindi ,null);
			}
			
			elSindi.setDescSindi(descSindi);
			
			
		}
		
		
		//miro a ver cuań es el idLote
		strSqlCorrelativo = new StringBuffer();
		strSqlCorrelativo.append("SELECT MAX(");
		strSqlCorrelativo.append(W83bLotesPreavisosBD.codLote);
		strSqlCorrelativo.append(") AS ").append(W83bLotesPreavisosBD.codLote);;
		strSqlCorrelativo.append(" FROM ");
		strSqlCorrelativo.append(W83bLotesPreavisosBD.lotesPreavisosTable);
		
		List idPreaviso = W83bDataBase.executeSimpleQuery(strSqlCorrelativo.toString(),new ArrayList(),null);
		int idLoteNext=1;
		
		
		
		if (idPreaviso!=null && idPreaviso.size()>0 && idPreaviso.get(0)!=null)
		{
			idLoteNext=Integer.parseInt(idPreaviso.get(0).toString());
		}
		  
		strSql = new StringBuffer();
		strSql.append("SELECT ");
		strSql.append(W83bLotesPreavisosBD.codLote).append(",");
		strSql.append(W83bLotesPreavisosBD.territorio).append(",");
		strSql.append(W83bLotesPreavisosBD.correlativo).append(",");
		if("eu".equals(param.getIdioma())){
			strSql.append(W83bLotesPreavisosBD.descSindiEus).append(" AS ").append(W83bLotesPreavisosBD.descSindi).append(",");
		}else{
			strSql.append(W83bLotesPreavisosBD.descSindi).append(" AS ").append(W83bLotesPreavisosBD.descSindi).append(",");
		}		   
		strSql.append(W83bLotesPreavisosBD.ficheroIda).append(",");
		strSql.append(" TO_CHAR( ").append(W83bLotesPreavisosBD.fechaCreacion).append(",?) AS ").append(W83bLotesPreavisosBD.fechaCreacion).append(",");
		strSql.append(" TO_CHAR( ").append(W83bLotesPreavisosBD.fechaEntrada).append(",?) AS ").append(W83bLotesPreavisosBD.fechaEntrada);
		
		params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
		params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
		
		strSql.append(" FROM ").append(W83bLotesPreavisosBD.lotesPreavisosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.sindicatosTable);
		strSql.append(" , ").append(W83bLotesPreavisosBD.provinciasTable);
		strSql.append(" WHERE ").append(W83bLotesPreavisosBD.lotesPreavisosTable).append(".").append(W83bLotesPreavisosBD.codTerrit);
		strSql.append(" = ").append(W83bLotesPreavisosBD.provinciasTable).append(".").append(W83bLotesPreavisosBD.id);
		strSql.append(" AND ").append(W83bLotesPreavisosBD.lotesPreavisosTable).append(".").append(W83bLotesPreavisosBD.codSindi07);
		strSql.append(" = ").append(W83bLotesPreavisosBD.sindicatosTable).append(".").append(W83bLotesPreavisosBD.codSindi19);
		strSql.append(" AND ").append(W83bLotesPreavisosBD.codLote).append(" = ").append(idLoteNext);
		

		W83bClsTrazas.trazaError(null, "SQL:"+ strSql.toString(),null);
		W83bClsTrazas.trazaError(null, "LOTE: " + param.getCodLote(),null);
		
		List listaLotes = W83bDataBase.executeQuery(strSql.toString(),params,W83bLotesPreavisosBean.class,param.getUsuarioBean(), null);
	
		W83bLotesPreavisosBean param2 = (W83bLotesPreavisosBean)listaLotes.get(0);	
		param.setDescSindicato(param2.getDescSindicato());
		param.setFechaCreacion(param2.getFechaCreacion());
		param.setFechaEntrada(param2.getFechaEntrada());
		param.setTerritorio(param2.getTerritorio());
		param.setListaSindicatosTam(listaSindicatos.size()+"");
		
		W83bClsTrazas.trazaError(null, " &&&&&& ANTES DE INFO  param.getSessionTokenXLNET() &&&&&& --> "+ param.getSessionTokenXLNET(),new Exception());//NOPMD
		
		
		if(listaSindicatos.size()>0){
			W83bInformacionProcedimiento info = new W83bInformacionProcedimiento(param.getSessionTokenXLNET(), W83bProperties.getProperty("w83b","catalogo.procedureId"));
			
			W83bNotificacionesBean informacionNotificacion= new W83bNotificacionesBean(usuario.getDniUsuario(), usuario.getNombreUsuario(), "", param.getNombreFichero(), idLoteNext+"", param.getSessionTokenXLNET(), territorio);
			
			W83bNotificacionThread tareaNotificar=new W83bNotificacionThread((ArrayList)listaSindicatos,info,param.getSolicitudPreaviso(),informacionNotificacion,W83bClsConstantes.IDA, param.getNombreFichero(), param.getDocumentoImportadoOriginal(), usuario.getIdioma());
	        tareaNotificar.start();
		}
		
        
        param.setDescTerritorio(territorio);
        
		return param ;	
		
	}
	
	public W83bLotesPreavisosBean deshacerAltaLote(W83bLotesPreavisosBean param)
	throws Exception {
		
		
		StringBuffer strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
	//	StringBuffer strSqlCorrelativo = new StringBuffer(W83bClsConstantes.CUARENTA);
		
		W83bClsTrazas.trazaError(null, "DAO deshacerAltaLote",null);
		List params = new ArrayList();
		
		strSql.append("DELETE FROM  ");
		strSql.append(W83bLotesPreavisosBD.preavisosTable);
		strSql.append(" WHERE ");
		strSql.append(W83bLotesPreavisosBD.codLote8);
		strSql.append(" = ?");
		
		
		params.add(param.getCodLote());
		
		W83bDataBase.executeTableMovement(strSql.toString(), params,param.getUsuarioBean());
		
		strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		params.clear();
		strSql.append("DELETE FROM  ");
		strSql.append(W83bLotesPreavisosBD.lotesPreavisosTable);
		strSql.append(" WHERE ");
		strSql.append(W83bLotesPreavisosBD.codLote);
		strSql.append(" = ?");
		
		
		params.add(param.getCodLote());
		
		W83bDataBase.executeTableMovement(strSql.toString(), params,param.getUsuarioBean());
		
		return param ;	
		
	}
	
	/* (non-Javadoc)
	 * @see w83b.w83bDAO.W83bIMantenimientosDAO#detalleArbitro(w83b.w83bBeans.W83bArbitrosBean)
	 */
	public W83bLotesPreavisosBean obtenerDetallePreaviso(W83bLotesPreavisosBean param)
	throws Exception {
		
		
		StringBuffer strSql = new StringBuffer(W83bClsConstantes.CUARENTA);
		List params = new ArrayList();
		
		strSql.append("SELECT ");
		strSql.append(W83bLotesPreavisosBD.id8).append(",");
		strSql.append(W83bLotesPreavisosBD.cif).append(",");
		strSql.append(W83bLotesPreavisosBD.razonSocial).append(",");
		strSql.append(W83bLotesPreavisosBD.domicilio).append(" , ");
		strSql.append(W83bLotesPreavisosBD.territorio8).append(",");
		strSql.append(W83bLotesPreavisosBD.municipio8).append(",");
		strSql.append(W83bLotesPreavisosBD.codPostal8).append(",");
		strSql.append(W83bLotesPreavisosBD.telefono8).append(",");
		strSql.append(W83bLotesPreavisosBD.fax8).append(",");
		strSql.append(W83bLotesPreavisosBD.email8).append(",");
		strSql.append(W83bLotesPreavisosBD.cnae8).append(",");
		strSql.append(" TO_CHAR( ").append(W83bLotesPreavisosBD.fechaInicio).append(",?) AS ").append(W83bLotesPreavisosBD.fechaInicio).append(",");
		strSql.append(W83bLotesPreavisosBD.codConvenio8).append(",");
		strSql.append(W83bLotesPreavisosBD.parcial8).append(",");
		strSql.append(W83bLotesPreavisosBD.global8).append(",");
		strSql.append(W83bLotesPreavisosBD.admonEmp8).append(",");
		strSql.append(W83bLotesPreavisosBD.centrosAfect).append(",");
		strSql.append(W83bLotesPreavisosBD.codSindi8).append(",");
		strSql.append(W83bLotesPreavisosBD.numReg8).append(",");
		strSql.append(W83bLotesPreavisosBD.fechaReg8).append(",");
		strSql.append(W83bLotesPreavisosBD.preaviso8).append(",");
		strSql.append(W83bLotesPreavisosBD.anyopreaviso8).append(",");
		strSql.append(W83bLotesPreavisosBD.ident8).append(",");
		strSql.append(W83bLotesPreavisosBD.observaciones8);
		
		params.add(W83bDateUtil.getInstance().devolverFormatoIdioma(param.getIdioma()));
		
		strSql.append(" FROM ").append(W83bLotesPreavisosBD.preavisosTable);
		
		//strSql.append(" WHERE ").append(W83bLotesPreavisosBD.cif).append(" = ? ");
		strSql.append(" WHERE ").append(W83bLotesPreavisosBD.id8).append(" = ? ");
		
		try{
			params.add(param.getId8().split("_")[1]);
		}catch(Exception e){
			params.add(param.getId8());
		}
		
		if(!param.getIdColumna().equalsIgnoreCase("")){
			strSql.append(" ORDER BY ").append(param.getIdColumna()).append(" ").append(param.getSort());
		}
		
		
		List listaPreavisos = W83bDataBase.executeQuery(strSql.toString(),params,W83bLotesPreavisosBean.class,param.getUsuarioBean(), null);
		
		return (W83bLotesPreavisosBean)listaPreavisos.get(0);	
		
	}
	
}
